package com.wms.common.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.BigDecimal;

import com.wms.common.utils.poi.ExcelHandlerAdapter;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;

/**
 * Excel操作（单个）
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Excel {
    /**
     * 基础配置：列顺序
     *
     * @return
     */
    int sort() default Integer.MAX_VALUE;

    /**
     * 基础配置：类标题
     *
     * @return
     */
    String name() default "";

    /**
     * 基础配置：字段作用类型
     *
     * @return
     */
    Type type() default Type.ALL;

    /**
     * 基础配置：是否导出该字段
     *
     * @return
     */
    boolean isExport() default true;

    /**
     * 数据转换：日期格式
     *
     * @return
     */
    String dateFormat() default "";

    /**
     * 数据转换：关联数据字典
     *
     * @return
     */
    String dictType() default "";

    /**
     * 数据转换：导入时数据转义规则
     *
     * @return
     */
    String readConverterExp() default "";

    /**
     * 数据转换：数组/集合类型字段的分隔符
     *
     * @return
     */
    String separator() default ",";

    /**
     * 数据转换：小数精度控制
     *
     * @return
     */
    int scale() default -1;

    int roundingMode() default BigDecimal.ROUND_HALF_EVEN;

    /**
     * 数据转换：数值后缀
     *
     * @return
     */
    String suffix() default "";

    /**
     * 数据转换：控制默认显示内容
     *
     * @return
     */
    String defaultValue() default "";

    /**
     * 数据转换：设置单元格数据类型
     *
     * @return
     */
    ColumnType cellType() default ColumnType.STRING;

    /**
     * 样式控制：行高
     *
     * @return
     */
    double height() default 14;

    /**
     * 样式控制：列宽
     *
     * @return
     */
    double width() default 16;

    /**
     * 样式控制：字体颜色
     *
     * @return
     */
    IndexedColors color() default IndexedColors.BLACK;

    /**
     * 样式控制：对齐方式
     *
     * @return
     */
    HorizontalAlignment align() default HorizontalAlignment.CENTER;

    /**
     * 样式控制：单元格提示信息
     *
     * @return
     */
    String prompt() default "";

    /**
     * 样式控制：设置下拉选择列表
     *
     * @return
     */
    String[] combo() default {};

    /**
     * 关联嵌套对象属性
     *
     * @return
     */
    String targetAttr() default "";

    /**
     * 自定义数据处理器
     *
     * @return
     */
    Class<?> handler() default ExcelHandlerAdapter.class;

    /**
     * 自定义处理器的参数
     *
     * @return
     */
    String[] args() default {};

    /**
     * 是否再末尾添加统计行
     *
     * @return
     */
    boolean isStatistics() default false;

    /**
     * 单元格对齐方式（0-自动，1-靠左，2-居中，3-靠右）
     */
    enum Align {
        AUTO(0),
        LEFT(1),
        CENTER(2),
        RIGHT(3);

        private final int value;

        Align(int value) {
            this.value = value;
        }

        public int value() {
            return this.value;
        }
    }

    /**
     * 字段导入/导出（0-全部，1-导出，2-导入）
     */
    enum Type {
        ALL(0),
        EXPORT(1),
        IMPORT(2);

        private final int value;

        Type(int value) {
            this.value = value;
        }

        public int value() {
            return this.value;
        }
    }

    /**
     * 单元格数据类型（0-数字，1-字符串，2-图片）
     */
    enum ColumnType {
        NUMERIC(0),
        STRING(1),
        IMAGE(2);

        private final int value;

        ColumnType(int value) {
            this.value = value;
        }

        public int value() {
            return this.value;
        }
    }
}